/*
最大连续子序列
给定K个整数的序列{ N1, N2, ..., NK }，其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj }，其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个，
例如给定序列{ -2, 11, -4, 13, -5, -2 }，其最大连续子序列为{ 11, -4, 13 }，最大和为20。
在今年的数据结构考卷中，要求编写程序得到最大和，现在增加一个要求，即还需要输出该子序列的第一个和最后一个元素。
Input
测试输入包含若干测试用例，每个测试用例占2行，第1行给出正整数K( < 10000 )，第2行给出K个整数，中间用空格分隔。当K为0时，输入结束，该用例不被处理。
Output
对每个测试用例，在1行里输出最大和、最大连续子序列的第一个和最后一个元
素，中间用空格分隔。如果最大连续子序列不唯一，则输出序号i和j最小的那个（如输入样例的第2、3组）。若所有K个元素都是负数，则定义其最大和为0，输出整个序列的首尾元素。
Sample Input
6
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
1
10
3
-1 -5 -2
3
-1 0 -2
0
Sample Output
20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0
题意分析：对于所有的输入元素都小于等于0的情况分开讨论。
*/
#include <bits/stdc++.h>
#define ll long long
#define PI acos(-1)
#define M(n, m) memset(n, m, sizeof(n));
const int INF = 1e9 + 7;
const int maxn = 1e5;
using namespace std;

int a[maxn], maxx, sum, n, _begin, _end, _start;

void DP()
{
    sum = 0;
    _begin = _end = _start = 0;
    maxx = -INF;
    for (int i = 0; i < n; i ++)
    {
        if (sum + a[i] > 0)
            sum += a[i];
        else
        {
            sum = 0;
            _start = i + 1;
        }
        if (sum > maxx)
        {
            _begin = _start;
            _end = i;
            maxx = sum;
        }
    }
    printf("%d %d %d\n", maxx, a[_begin], a[_end]);
}

int main()
{
    while(scanf("%d", &n) && n)
    {
        M(a, 0)
        for (int i = 0; i < n; i ++)
            scanf("%d", &a[i]);
        bool flag = false;
        // 查找是否存在大于0的数
        for (int i = 0; i < n; i ++)
            if (a[i] > 0)
            {
                flag = true;
                break;
            }
        // 不存在大于0的数的处理方法
        if (!flag)
        {
            // 查找是否有等于0的数
            bool flag1 = false;
            for (int i = 0; i < n; i ++)
                if (a[i] == 0)
                {
                    printf("%d %d %d\n", 0, a[i], a[i]);
                    flag1 = true;
                    break;
                }
            // 全部都小于0
            if (!flag1)
                printf("%d %d %d\n", 0, a[0], a[n - 1]);
        }
        else
            // 标准的最大连续子序列的求解过程
            DP();
    }
    return 0;
}
